#ifndef GAMEENGINE_GEOMETRY_TOPOLOGY_HALFEDGE_TRGL_MESH_H
#define GAMEENGINE_GEOMETRY_TOPOLOGY_HALFEDGE_TRGL_MESH_H

#include <GameEngine/Geometry/geometry_settings.h>

#include <GameEngine/Geometry/Topology/halfedge_mesh.h>


#ifdef GAMEENGINE_NAMESPACES
namespace GameEngine {
#endif

//=================================================================================

//! Class used to represent half-edge meshes solely made of triangles
/*!
 *  This class can generally been seen as an API dedicated to manipulating safely half-edges
 *  made of triangles.
 *
 @sa The HalfEdgeMesh class to manipulate generic meshes made of half-edges.
 */
template <class T>
class HalfEdgeTrglMesh : public HalfEdgeMesh<T> {

public:
	HalfEdgeTrglMesh();
	virtual ~HalfEdgeTrglMesh();

	HalfEdgeFace<T>* add_triangle(const T& v1, const T& v2, const T& v3);
	HalfEdgeFace<T>* find_triangle(const T& v1, const T& v2, const T& v3) const;

	HalfEdgeVertex<T>* insert_vertex(const T& vertex, HalfEdgeFace<T>& trgl);

private:
	HalfEdgeTrglMesh(const HalfEdgeTrglMesh& rhs);
	HalfEdgeTrglMesh& operator=(const HalfEdgeTrglMesh& rhs);
};

//=================================================================================

#ifdef GAMEENGINE_NAMESPACES
} // namespace GameEngine
#endif

#include <GameEngine/Geometry/Topology/halfedge_trgl_mesh.hpp>

#endif
